package com.whenimdrunk.negocio;

import java.lang.reflect.Method;
import java.util.ArrayList;

import com.whenimdrunk.entidades.Bloqueados;
import com.whenimdrunk.persistencia.BloqueadorHelper;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.telephony.TelephonyManager;
import android.widget.Toast;

/**
 * Created by Iban on 14/11/13.
 */
public class PhoneCallReceiver extends BroadcastReceiver {

    private BloqueadorHelper bloqueadorTelefonos = null;
    private static TelephonyManager telephonyManager;

    private boolean bloquearTelefono;

    private static int contadorBloqueos = 0;

    @Override
    public void onReceive(Context context, Intent intent) {

        //Toast.makeText(context, "OutGoingCallReceiver", Toast.LENGTH_SHORT).show();

        telephonyManager =
            (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

        try {

            Bundle extras = intent.getExtras();

            if(extras != null){

                if(intent.getAction().equals("android.intent.action.PHONE_STATE")) {

                    // Incoming call
                    String state = extras.getString(TelephonyManager.EXTRA_STATE);
                    if(state != null &&
                       state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)){

                        String phoneNumber = "";
                        if(state.equalsIgnoreCase(TelephonyManager.EXTRA_STATE_RINGING)){
                            phoneNumber =
                                    extras.getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
                        }

                        if(phoneNumber!=null && !phoneNumber.equalsIgnoreCase("")){
                            bloquearTelefono = consultarBloqueo(context, phoneNumber);
                        }
                    }

                }else if(intent.getAction().equals("android.intent.action.NEW_OUTGOING_CALL")) {

                    // Outgoing call
                    String outgoingNumber =
                        intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);

                    if(outgoingNumber!=null && !outgoingNumber.equalsIgnoreCase("")){
                        bloquearTelefono = consultarBloqueo(context, outgoingNumber);
                    }

                }

            }

            if(bloquearTelefono){

                Class claseTelephonyManager =
                    Class.forName(telephonyManager.getClass().getName());
                Method method = claseTelephonyManager.getDeclaredMethod("getITelephony");
                method.setAccessible(true);

                setResultData(null);

                Toast.makeText(
                    context, "¡¡¡¡¡¡Llamada bloqueada!!!!!!", Toast.LENGTH_SHORT).show();

                contadorBloqueos++;

            }

        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public boolean consultarBloqueo(Context context, String phoneNumber){

        //Obtenemos la BD
        bloqueadorTelefonos = new BloqueadorHelper(context);

        ArrayList<Bloqueados> telefonosBloqueados = new ArrayList<Bloqueados>();
        bloqueadorTelefonos.getBloqueados(telefonosBloqueados);

        if(telefonosBloqueados.size()>0){

            ArrayList<String> aTelefonosBloqueados = new ArrayList<String>();
            for(Bloqueados telefonoBloqueado : telefonosBloqueados){

                //Miramos si el telefono esta entre los bloqueados
                if(telefonoBloqueado.getTelefono().equalsIgnoreCase(phoneNumber)){

                    return true;

                }

            }

        }

        return false;

    }

    public int getContadorBloqueos() {
        return contadorBloqueos;
    }

}
